/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.jm.acionista.view;

import br.jm.acionista.base.eao.EaoException;
import br.jm.acionista.entity.Modulo;
import br.jm.acionista.entity.Usuario;
import br.jm.acionista.entity.UsuarioModulo;
import br.jm.acionista.sistema.eao.ModuloEao;
import java.io.IOException;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.servlet.http.HttpSession;

/**
 *
 * @author joao
 */
public class MenuBean {

    private boolean lAcesso;
    private String cMensagem = "Usuário sem Acesso a esse Módulo";
    private FacesContext ctx = FacesContext.getCurrentInstance();
    public HttpSession session;
    private Usuario usuarioAutenticado;
    private ModuloEao moduloJpa;
    private Modulo selectedModulo;

    public MenuBean() {
        moduloJpa = ModuloEao.getInstance();
        session = (HttpSession) ctx.getExternalContext().getSession(false);

        usuarioAutenticado = (Usuario) session.getAttribute("usuarioAutenticado");
    }

    public boolean islAcesso() {
        //lAcesso = false;
        return lAcesso;
    }

    public void setlAcesso(boolean lAcesso) {
        this.lAcesso = lAcesso;
    }

    public void cliente(ActionEvent actionEvent) throws EaoException {
        try {
            VerificaUsuario("Acionista", 1);
        } catch (IOException ex) {
            Logger.getLogger(MenuBean.class.getName()).log(Level.SEVERE, null, ex);
            addMessage(cMensagem);
        }
    }

    public void cidade(ActionEvent actionEvent) throws EaoException {
        try {
            VerificaUsuario("Cidades", 32);
        } catch (IOException ex) {
            Logger.getLogger(MenuBean.class.getName()).log(Level.SEVERE, null, ex);
            addMessage(cMensagem);
        }
    }

    public void bairro(ActionEvent actionEvent) throws EaoException {
        try {
            VerificaUsuario("Bairros", 31);
        } catch (IOException ex) {
            Logger.getLogger(MenuBean.class.getName()).log(Level.SEVERE, null, ex);
            addMessage(cMensagem);
        }
    }

    public void logradouro(ActionEvent actionEvent) throws EaoException {
        try {
            VerificaUsuario("Logradouros", 7);
        } catch (IOException ex) {
            Logger.getLogger(MenuBean.class.getName()).log(Level.SEVERE, null, ex);
            addMessage(cMensagem);
        }
    }

    public void suc(ActionEvent actionEvent) throws EaoException {
        try {
            VerificaUsuario("Suc", 1);
        } catch (IOException ex) {
            Logger.getLogger(MenuBean.class.getName()).log(Level.SEVERE, null, ex);
            addMessage(cMensagem);
        }
    }

    public void moeda(ActionEvent actionEvent) throws EaoException {
        try {
            VerificaUsuario("Moeda", 1);
        } catch (IOException ex) {
            Logger.getLogger(MenuBean.class.getName()).log(Level.SEVERE, null, ex);
            addMessage(cMensagem);
        }
    }

    public void procurador(ActionEvent actionEvent) throws EaoException {
        try {
            VerificaUsuario("Procurador", 6);
        } catch (IOException ex) {
            Logger.getLogger(MenuBean.class.getName()).log(Level.SEVERE, null, ex);
            addMessage(cMensagem);
        }
    }

    public void departamento(ActionEvent actionEvent) throws EaoException {
        try {
            VerificaUsuario("Departamentos", 3);
        } catch (IOException ex) {
            Logger.getLogger(MenuBean.class.getName()).log(Level.SEVERE, null, ex);
            addMessage(cMensagem);
        }
    }

    public void nacionalidade(ActionEvent actionEvent) throws EaoException {
        try {
            VerificaUsuario("Nacionalidade", 4);
        } catch (IOException ex) {
            Logger.getLogger(MenuBean.class.getName()).log(Level.SEVERE, null, ex);
            addMessage(cMensagem);
        }
    }

    public void codigoddi(ActionEvent actionEvent) throws EaoException {
        try {
            VerificaUsuario("Código D.D.I.", 10);
        } catch (IOException ex) {
            Logger.getLogger(MenuBean.class.getName()).log(Level.SEVERE, null, ex);
            addMessage(cMensagem);
        }
    }

    public void codigoddd(ActionEvent actionEvent) throws EaoException {
        try {
            VerificaUsuario("Código D.D.D.", 11);
        } catch (IOException ex) {
            Logger.getLogger(MenuBean.class.getName()).log(Level.SEVERE, null, ex);
            addMessage(cMensagem);
        }
    }

    public void relAcionista(ActionEvent actionEvent) throws EaoException {
        try {
            VerificaUsuario("Acionistas", 18);
        } catch (IOException ex) {
            Logger.getLogger(MenuBean.class.getName()).log(Level.SEVERE, null, ex);
            addMessage(cMensagem);
        }
    }

    public void tipotransferencia(ActionEvent actionEvent) throws EaoException {
        try {
            VerificaUsuario("Tipo de Transferencia", 5);
        } catch (IOException ex) {
            Logger.getLogger(MenuBean.class.getName()).log(Level.SEVERE, null, ex);
            addMessage(cMensagem);
        }
    }

    public void livro(ActionEvent actionEvent) throws EaoException {
        try {
            VerificaUsuario("Livro", 13);
        } catch (IOException ex) {
            Logger.getLogger(MenuBean.class.getName()).log(Level.SEVERE, null, ex);
            addMessage(cMensagem);
        }
    }

    public void transferencia(ActionEvent actionEvent) throws EaoException {
        try {
            VerificaUsuario("Transferência", 14);
        } catch (IOException ex) {
            Logger.getLogger(MenuBean.class.getName()).log(Level.SEVERE, null, ex);
            addMessage(cMensagem);
        }
    }

    public void anotacao(ActionEvent actionEvent) throws EaoException {
        try {
            VerificaUsuario("Anotação", 2);
        } catch (IOException ex) {
            Logger.getLogger(MenuBean.class.getName()).log(Level.SEVERE, null, ex);
            addMessage(cMensagem);
        }
    }

    public void subscricao(ActionEvent actionEvent) throws EaoException {
        try {
            VerificaUsuario("Subscrição", 15);
        } catch (IOException ex) {
            Logger.getLogger(MenuBean.class.getName()).log(Level.SEVERE, null, ex);
            addMessage(cMensagem);
        }
    }

    public void averbacao(ActionEvent actionEvent) throws EaoException {
        try {
            VerificaUsuario("Conversão/Averbação", 16);
        } catch (IOException ex) {
            Logger.getLogger(MenuBean.class.getName()).log(Level.SEVERE, null, ex);
            addMessage(cMensagem);
        }
    }

    public void empresa(ActionEvent actionEvent) throws EaoException {
        try {
            VerificaUsuario("Empresa", 24);
        } catch (IOException ex) {
            Logger.getLogger(MenuBean.class.getName()).log(Level.SEVERE, null, ex);
            addMessage(cMensagem);
        }
    }

    public void usuario(ActionEvent actionEvent) throws EaoException {
        try {
            VerificaUsuario("Usuário", 25);
        } catch (IOException ex) {
            Logger.getLogger(MenuBean.class.getName()).log(Level.SEVERE, null, ex);
            addMessage(cMensagem);
        }
    }

    public void relLivro(ActionEvent actionEvent) throws EaoException {
        try {
            VerificaUsuario("Livro de Registro de Ações", 19);
        } catch (IOException ex) {
            Logger.getLogger(MenuBean.class.getName()).log(Level.SEVERE, null, ex);
            addMessage(cMensagem);
        }
    }

    public void relLivroTransferencia(ActionEvent actionEvent) throws EaoException {
        try {
            VerificaUsuario("Livro de Transferências", 20);
        } catch (IOException ex) {
            Logger.getLogger(MenuBean.class.getName()).log(Level.SEVERE, null, ex);
            addMessage(cMensagem);
        }
    }

    public void relAcionistaParticipacao(ActionEvent actionEvent) throws EaoException {
        try {
            VerificaUsuario("Acionistas Participação", 21);
        } catch (IOException ex) {
            Logger.getLogger(MenuBean.class.getName()).log(Level.SEVERE, null, ex);
            addMessage(cMensagem);
        }
    }
    
    public void fechamento(ActionEvent actionEvent) throws EaoException {
        try {
            VerificaUsuario("Fechamento Anual", 26);
        } catch (IOException ex) {
            Logger.getLogger(MenuBean.class.getName()).log(Level.SEVERE, null, ex);
            addMessage(cMensagem);
        }
    }
    
    public void rateio(ActionEvent actionEvent) throws EaoException {
        try {
            VerificaUsuario("Rateio\\Transferência", 27);
        } catch (IOException ex) {
            Logger.getLogger(MenuBean.class.getName()).log(Level.SEVERE, null, ex);
            addMessage(cMensagem);
        }
    }
    
    public void relCertificado(ActionEvent actionEvent) throws EaoException {
        try {
            VerificaUsuario("Certificado de Ações", 28);
        } catch (IOException ex) {
            Logger.getLogger(MenuBean.class.getName()).log(Level.SEVERE, null, ex);
            addMessage(cMensagem);
        }
    }
    
    public void relCautela(ActionEvent actionEvent) throws EaoException {
        try {
            VerificaUsuario("Listagem de Composição de Certificados", 29);
        } catch (IOException ex) {
            Logger.getLogger(MenuBean.class.getName()).log(Level.SEVERE, null, ex);
            addMessage(cMensagem);
        }
    }
    
    public void relTransferencia(ActionEvent actionEvent) throws EaoException {
        try {
            VerificaUsuario("Listagem de Transferências Simplificada", 30);
        } catch (IOException ex) {
            Logger.getLogger(MenuBean.class.getName()).log(Level.SEVERE, null, ex);
            addMessage(cMensagem);
        }
    }
    
    public void relVenda(ActionEvent actionEvent) throws EaoException {
        try {
            VerificaUsuario("Listagem de Vendas", 33);
        } catch (IOException ex) {
            Logger.getLogger(MenuBean.class.getName()).log(Level.SEVERE, null, ex);
            addMessage(cMensagem);
        }
    }

    public void addMessage(String summary) {
        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, summary, null);
        FacesContext.getCurrentInstance().addMessage(null, message);
    }

    public void VerificaUsuario(String cModulo, int nIdModulo) throws IOException, EaoException {
        UsuarioModulo usuarioTemp = new UsuarioModulo();
        selectedModulo = new Modulo();

        if (usuarioAutenticado.getTipUsuario().equals("Administrador")) {
            this.lAcesso = true;
            
            selectedModulo = moduloJpa.getPorId(nIdModulo);
            usuarioTemp.setModulo(selectedModulo);
        } else if (usuarioAutenticado.getTipStatus().equals("Desativado")) {
            this.lAcesso = false;
        } else {
            List<UsuarioModulo> listUsuarioModulo = usuarioAutenticado.getUsuarioModuloList();

            for (int i = 0; i < listUsuarioModulo.size(); i++) {
                usuarioTemp = listUsuarioModulo.get(i);
                if (usuarioTemp.getModulo().getIdModulo() == nIdModulo) {
                    this.lAcesso = true;
                    break;
                } else {
                    this.lAcesso = false;
                }
            }
        }

        if (this.lAcesso) {
            ctx.getExternalContext().redirect(ctx.getExternalContext().getRequestContextPath() + usuarioTemp.getModulo().getDscPagina());
        } else {
            addMessage("ATENÇÃO ... Usuário não tem Direito de Acesso a esse Modulo!");
        }
    }
}
